package Algorithm.sort;
//Bubble类其范型T继承Comparable类中的范型<T>
//这个类又继承了Sort类,是冒泡排序类
public class Bubble<T extends Comparable<T>> extends Sort<T>{
    @Override
    public void sort(T[] nums) {
        int N=nums.length;//N用来记录数组的长度
        boolean isSorted=false;//标志位,用来记录数组是否已经是有序的,默认false,表示数组无序
        for (int i = N-1; i>0&&!isSorted ; i--) {//i:从数组最后一个元素往前遍历,记录已经排序的数组下标
            isSorted=true;//每次都默认新一趟剩下的数组是排序好的,能避免遍历浪费
            for (int j = 0; j < i; j++) {//j：每次从数组下标为0的位置遍历,直到已经排序好的元素(下标为[i])的前一个位置
                if(less(nums[j+1],nums[j] )){//判断j的后一个元素是否小于j所表示的元素的的大小
                    isSorted=false;//一旦进行交换,说明数组无序,让下一趟再判断一下,如果有序,下一趟就不用遍历了
                    swap(nums,j,j+1);//交换数组j和j的后一个元素位置,保证后面的元素比前一个大(让大的元素一直上浮到最右)
                }
            }
        }
    }
}
